import 'package:logger/logger.dart';

final logger = Logger(printer: PrettyPrinter());

void main(List<String> arguments) {
  dynamic t;
  Object x;
  t = "hi world";
  x = 'Hello Object';
  logger.i("t : $t");
  logger.i("x : $x");

  //下面代码没有问题
  t = 1000;
  x = 1000;

  logger.i("t : $t");
  logger.i("x : $x");

  dynamic a;
  Object b = "";
  a = "";
  // 正常
  logger.i("a.length : ${a.length} ");

  final str = "hi world";
  const str1 = "hi world";

  //默认为不可空，必须在定义时初始化。
  int i = 8;

  // 定义为可空类型，对于可空变量，我们在使用前必须判空。
  int? j;

  // 如果我们预期变量不能为空，但在定义时不能确定其初始值，则可以加上late关键字，
  // 表示会稍后初始化，但是在正式使用它之前必须得保证初始化过了，否则会报错
  late int k;

  var say = (str) {
    logger.i(str);
  };

  say("hi world");

  logger.i(sayHello("张三", "你好", "iPhone 13 Pro Max"));
  logger.i(sayHello("李四", "你好"));
}

String sayHello(String from, String msg, [String? device]) {
  var result = '$from says $msg';
  if (device != null) {
    result = '$result with a $device';
  }
  return result;
}

class Test {
  int? i;

  Function? fun;

  say() {
    if (i != null) {
      logger.i("i!*8 : ${i! * 8}");
    }
    if (fun != null) {
      fun!();
    }
  }
}
